软硬件环境要求
Kubernetes v1.30 单个集群支持的最大节点数为 5,000,具体约束:
- 每个节点的 Pod 数量不超过 110
- 节点数不超过 5,000
- Pod 总数不超过 150,000
- 容器总数不超过 300,000
硬件配置
| 节点类型 | CPU | 内存 | 硬盘 | 数量 |
|---|---|---|---|---|
| Master | 4核+ | 8G+ | 1TB+ | 3台 |
| Worker | 4核+ | 16G+ | 500G+ | 3台+ |
| 负载均衡 | 2核 | 4G | 100G | 2台 |
Master 节点建议奇数台(1/3/5/7),高可用场景推荐 3 台以上。
软件配置
操作系统推荐 Ubuntu 20.04 或 22.04。
网络要求
- 集群中所有机器网络彼此互通
- 节点之间不可以有重复的主机名、MAC 地址或 product_uuid
- 开启必要的端口
- 必须禁用交换分区(
sudo swapoff -a)
环境准备
以下操作需要在所有节点上执行。
1. 主机名和 IP 设置
# 设置主机名
hostnamectl set-hostname master1 # 在各节点分别设置
bash
配置静态 IP /etc/netplan/00-installer-config.yaml:
network:
ethernets:
ens32:
dhcp4: no
addresses:
- 192.168.4.210/24
gateway4: 192.168.4.50
nameservers:
addresses:
- 114.114.114.114
search: []
version: 2
yaml
sudo netplan apply
bash
2. 配置 hosts 文件
# /etc/hosts
192.168.4.205 master1
192.168.4.206 master2
192.168.4.207 master3
192.168.4.208 node1
192.168.4.209 node2
192.168.4.210 node3
bash
3. 时间同步
# 配置时区
timedatectl set-timezone Asia/Shanghai
# 安装并配置时间同步
apt install -y ntpdate
ntpdate time1.aliyun.com
# 定时同步(可选)
crontab -e
# 添加:每隔一小时同步一次
0 */1 * * * ntpdate time1.aliyun.com
bash
4. 内核参数配置
内核转发与网桥过滤,目的是为内部通信:
# 创建内核模块文件
cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# 手动加载
sudo modprobe overlay
sudo modprobe br_netfilter
# 验证
lsmod | egrep "overlay"
lsmod | egrep "br_netfilter"
# 添加网桥转发
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用
sysctl --system
bash
5. 安装 IPVS
ipset 和 ipvsadm 用于高级网络管理和负载均衡:
apt install ipset ipvsadm -y
# 配置模块加载
cat << EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
# 创建加载脚本
cat << EOF | tee ipvs.sh
#!/bin/sh
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
chmod +x ipvs.sh
sh ipvs.sh
# 验证
lsmod | egrep "ip_vs"
bash
6. 关闭 swap
# 临时关闭
swapoff -a
# 永久关闭
vi /etc/fstab
# 注释掉 swap 行:UUID=xxx none swap sw 0 0
# 验证
free -h
bash
7. 关闭防火墙
# Ubuntu
systemctl disable --now ufw
# CentOS
systemctl disable --now firewalld
bash
8. 免密登录
在 Master 节点配置到所有节点的免密登录:
ssh-keygen
for host in master2 master3 node1 node2 node3; do
ssh-copy-id root@$host
done
bash
完成后建议做一次快照,方便后续回滚。
↑